package com.xjtu.conan.controller;


import com.xjtu.conan.entity.NewsCommentsInfo;
import com.xjtu.conan.entity.UserInfo;
import com.xjtu.conan.response.AjaxResponse;
import com.xjtu.conan.service.NewsCommentsInfoService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

/**
 * <p>
 * 新闻评论表 前端控制器
 * </p>
 *
 * @author 一只黑猩猩
 * @since 2021-04-19
 */
@CrossOrigin
@RestController
@RequestMapping("/conan/news-comments-info")
@Api(value = "新闻对应评论管理模块", description = "这是新闻对应评论信息CRUD的模块")
public class NewsCommentsInfoController {
    @Autowired
    private NewsCommentsInfoService commentsInfoService;

    @ApiOperation(value = "获取全部新闻评论", notes = "获取所有新闻的评论信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "current", value = "当前页", required = false, defaultValue = "1", paramType = "query", dataType = "int"),
            @ApiImplicitParam(name = "size", value = "每页数量", required = false, defaultValue = "10", paramType = "query", dataType = "int")
    })
    @RequestMapping(value = "/getAllComments", method = RequestMethod.GET)
    public AjaxResponse getAllComments(@RequestParam(value = "current") Integer current,
                                       @RequestParam(value = "size") Integer size) {

        return AjaxResponse.success(commentsInfoService.getAllNewsCommentsInfo(current, size));
    }

    @ApiOperation(value = "添加新闻评论", notes = "为某一个新闻添加评论")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "content", value = "评论内容", required = true, paramType = "form", dataType = "String"),
            @ApiImplicitParam(name = "nid", value = "所属新闻id", required = true, paramType = "form", dataType = "Long"),
            @ApiImplicitParam(name = "pid", value = "所属父评论id", required = true, defaultValue = "-1", paramType = "form", dataType = "Long")
    })
    @RequestMapping(value = "addNewsComments", method = RequestMethod.POST)
    public AjaxResponse addNewsComments(@RequestParam(value = "content") String content,
                                        @RequestParam(value = "nid") Long nid,
                                        @RequestParam(value = "pid") Long pid,
                                        HttpServletRequest request) throws IOException {
        UserInfo loginUser = (UserInfo) request.getSession().getAttribute("loginUser");
        NewsCommentsInfo commentsInfo = new NewsCommentsInfo()
                .setNewsId(nid)
//                .setUserId(loginUser.getUid())
                .setUserId(1384414001958338562L)
                .setNcContent(content)
                .setParentId(pid);
        return AjaxResponse.success("新增评论ID->" + commentsInfoService.addNewsComments(commentsInfo));
    }

    @ApiOperation(value = "更新新闻评论", notes = "录入新的新闻评论信息并且修改")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "content", value = "评论内容", required = true, paramType = "form", dataType = "String"),
            @ApiImplicitParam(name = "nid", value = "所属新闻id", required = true, paramType = "form", dataType = "Long"),
            @ApiImplicitParam(name = "pid", value = "所属父评论id", required = true, defaultValue = "-1", paramType = "form", dataType = "Long")
    })
    @RequestMapping(value = "updateNewsComments", method = RequestMethod.PUT)
    public AjaxResponse updateNewsComments(@RequestParam(value = "content") String content,
                                           @RequestParam(value = "nid") Long nid,
                                           @RequestParam(value = "pid") Long pid,
                                           HttpServletRequest request) throws IOException {
        UserInfo loginUser = (UserInfo) request.getSession().getAttribute("loginUser");
        NewsCommentsInfo commentsInfo = new NewsCommentsInfo()
                .setNewsId(nid)
//                .setUserId(loginUser.getUid())
                .setUserId(1384414001958338562L)
                .setNcContent(content)
                .setParentId(pid);
        return AjaxResponse.success(commentsInfoService.updateNewsComments(commentsInfo));
    }

    @ApiOperation(value = "删除新闻评论信息", notes = "从数据库中删除某个新闻")
    @ApiImplicitParam(name = "ncid", value = "删除新闻id", required = true, paramType = "query", dataType = "Long")
    @RequestMapping(value = "/deleteNewsComments", method = RequestMethod.DELETE)
    public AjaxResponse deleteNewsComments(@RequestParam(value = "ncid") Long ncid) {
        return AjaxResponse.success("数据库受影响行数->" + commentsInfoService.deleteNewsComments(ncid));
    }

    @ApiOperation(value = "根据父评论id查找新闻评论", notes = "获取根据父评论id查找到的新闻评论")
    @ApiImplicitParam(name = "pid", value = "父评论id", required = true, paramType = "query", dataType = "Long")
    @RequestMapping(value = "/getNewsCommentsBypId", method = RequestMethod.GET)
    public AjaxResponse getNewsCommentsBypId(@RequestParam(name = "pid") Long pid) {
        return AjaxResponse.success(commentsInfoService.getNewsCommentsBypid(pid));
    }

    @ApiOperation(value = "根据新闻评论id查找新闻评论", notes = "获取根据评论id查找到的新闻评论")
    @ApiImplicitParam(name = "ncid", value = "评论id", required = true, paramType = "query", dataType = "Long")
    @RequestMapping(value = "/getNewsCommentsByncId", method = RequestMethod.GET)
    public AjaxResponse getNewsCommentsBytcId(@RequestParam(name = "ncid") Long ncid) {
        return AjaxResponse.success(commentsInfoService.getNewsCommentByid(ncid));
    }

    @ApiOperation(value = "根据新闻id查找对应评论", notes = "获取根据新闻id查找到的新闻评论")
    @ApiImplicitParam(name = "nid", value = "新闻id", required = true, paramType = "query", dataType = "Long")
    @RequestMapping(value = "/getNewsCommentsBynid", method = RequestMethod.GET)
    public AjaxResponse getNewsCommentsBynid(@RequestParam(name = "nid") Long nid) {
        return AjaxResponse.success(commentsInfoService.getNewsCommentsBynid(nid));
    }

    @ApiOperation(value = "新闻评论总数量", notes = "获取数据库中新闻评论总数量")
    @RequestMapping(value = "/getTotal", method = RequestMethod.GET)
    public AjaxResponse getTotal() {
        return AjaxResponse.success(commentsInfoService.getTotal());
    }
}

